package TTest;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import DB.DB_DriverFactory;
import Entity.EMP_Entity;

public class TestDriver {
	@Test
	public void test0() {
		/*
		 * BeanListHandler ：将ResultSet中所有的数据转化成List，List中存放的是类对象
		 */
        //获取数据操作的SQL语句
		String strSQL="select * from emp";
		//获取查询的list内容
		List lst=(List) DB_DriverFactory.getDB_DriverInstance().
				query00(strSQL, new BeanListHandler(EMP_Entity.class));
		
		
		for(int i=0;i<lst.size();i++){
			EMP_Entity en = (EMP_Entity)lst.get(i);
			System.out.println(en.getFirst_name());
		}
		
		//遍历lst显示查询结果
		printList(lst);
	}
	/*
	 * 1.BeanListHandler是通过实体类和数据库表形成映射关系,
	 *     要求相应字段的字段名和实体类属性名保持一致，不一致的属性名则不形成映射关系
	 *     在使用时BeanListHandler后需要加一个实体类的class对象
	 *     此时便可以通过new一个该实体类的实例对象并通过get方法来获取其映射数据库的属性
	 *     
	 * 2.MapListHandler是直接和数据库表关联的，
	 *     List中存放的是Map，
	 *     在使用时需要new一个map对象，此时要get则只能使用map的键值对--（不能通过实体类来映射数据库）
	 *     此时直接输入数据库表中的字段名作为key值调取相应的字段数值 
	 */
	@Test
	public void test00() {
		/*
		 * MapListHandler ：将ResultSet中所有的数据存成List。List中存放的是Map
		 */
        //获取数据操作的SQL语句
		String strSQL="select * from emp where manager_id>? and salary>?";
		//获取查询的list内容
		List lst=(List) DB_DriverFactory.getDB_DriverInstance().
				query01(strSQL, new MapListHandler(),new Object[]{10,3000});
		
		for(int i=0;i<lst.size();i++){
			Map map = (Map)lst.get(i);
			System.out.println(map.get("工资"));
		}
		//遍历lst显示查询结果
		printList(lst);
	}
	
	@Test
	public void test01() {
		/*
		 * MapListHandler ：将ResultSet中所有的数据存成List。List中存放的是Map
		 */
        //获取数据操作的SQL语句
		String strSQL="select birth_date 生日,email 邮箱 , salary 工资   from emp";
		//获取查询的list内容
		List lst=(List) DB_DriverFactory.getDB_DriverInstance().
				query01(strSQL, new MapListHandler());
		//遍历lst显示查询结果
		printList(lst);
	}
	
	@Test
	public void test1() {
		/*
		 * ScalarHandler ：将ResultSet中一条记录的其中某一列的数据存成Object等转化类。
		 * ResultSetHandler接口提供了一个单独的方法：Object handle (java.sql.ResultSet .rs)
		 */
		String strSQL="select * from emp where manager_id=24";
		BigDecimal bd=(BigDecimal) DB_DriverFactory.getDB_DriverInstance().
				query00(strSQL, new ScalarHandler("salary"));
		//将BigDecimal转换为基本数据类型---String cann't be cast 错误是因为所查字段对应的数据类型与此处接收结果的变量类型不一致（一般可将BigDecimal类型改为object类型）
		int dbClo=bd.intValue();
		System.out.println("打印结果："+dbClo);
	}
	/**
	 * update更新数据
	 */
	@Test
	public void test2() {
		
		String strSQL="update emp set salary=salary-1 where manager_id>?";
		//i--所影响的记录条数
		int i= DB_DriverFactory.getDB_DriverInstance().update(strSQL,new Object[]{10});
	
		System.out.println(i>0?"更新成功":"更新失败");
	}
	
	/**
	 * batch--Oracle数据批处理
	 */
	@Test
	public void test3() {
	
		String strSQL="insert into emp(employee_id，first_name,birth_date, email) values(?,?,?,?)";
		int[] arr= DB_DriverFactory.getDB_DriverInstance().
				batch(strSQL,new Object[][]
						{{222,"杜月笙",TO_DATE("1990-02-18","YYYY-MM-DD"),"Doyuseng@qq.com"}});//---????
		//for循环遍历显示结果	
		for(int i=0;i<arr.length;i++){
			System.out.println("打印结果：\n第"+i+"行处理结果："+arr[i]);
		}
	}
	
	
	
	//,{223,"袁殊","SYSDATE","king@qq.com"}
	

	private Object TO_DATE(String string, String string2) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * 打印list集合
	 * 
	 * @param lst
	 */
	private static void printList(List lst) {
		System.out.println("list集合存储的二维表格内容：");
		for(int i=0;i<lst.size();i++){
			System.out.println(lst.get(i).toString());
		}
	}
}
